#pragma once

#include <gofcl_usbfs_ep_r.h>

typedef struct {
	u32_s TLEN : 19;
	u32_s PCNT : 10;
	u32_s MCPF_RXDPID_STPCNT : 2;
	u32_s : 1;
} usbfs_deplen_s;

_Static_assert(sizeof(usbfs_deplen_s) == 4,
	       "Struct usbfs_deplen_s defined error!");

static inline void usbfs_wreg_deplen_s(usbfs_ep_re io_r, usbfs_ep_rre ep_rr,
				       usbfs_deplen_s deplen) {
	union {
		usbfs_deplen_s d;
		u32_s u;
	} du = {
		.d = deplen,
	};
	usbfs_wreg_ep(io_r, ep_rr, USBFS_EP_LEN, du.u);
}

static inline usbfs_deplen_s usbfs_rreg_deplen_s(usbfs_ep_re io_r,
						 usbfs_ep_rre ep_rr) {
	union {
		usbfs_deplen_s d;
		u32_s u;
	} du = {
		.u = usbfs_rreg_ep(io_r, ep_rr, USBFS_EP_LEN),
	};
	return du.d;
}
